package leetcode;

import java.util.*;

/**
 * @param
 * @author oyz
 * @version 1.0.4
 * @description: 给你一个 m 行 n 列的矩阵 matrix ，请按照 顺时针螺旋顺序 ，返回矩阵中的所有元素。
 * 中等难度
 * @date 2022/5/31 8:26
 */
public class Code54 {


    public List<Integer> spiralOrder(int[][] matrix) {
        if(matrix == null ||matrix.length==0||matrix[0].length==0){
            return new LinkedList<>();
        }
        Set<Integer> objests = new HashSet<>();
        // 定义左边
        int left = 0;
        // 定义右边
        int right = matrix[0].length-1;
        // 定义上边
        int up = 0;
        // 定义下边
        int down = matrix.length -1;
        while(true){
            //遍历上边
            for(int i = left;i<=right;i++){
                objests.add(matrix[up][i]);
            }
            // 上边大于下边
            if(++up>down){
                break;
            }
            //遍历右边
            for(int i=up;i<=down;i++){
                objests.add(matrix[i][right]);
            }
            // 右边小于左边就退出
            if(--right<left){
                break;
            }
            // 遍历下边
            for(int i = right;i>=left;i--){
                objests.add(matrix[down][i]);
            }
            // 下边大于上边
            if (--down>up){
                break;
            }
            // 遍历左边
            for (int i = down;i>=up;i--){
                objests.add(matrix[i][left]);
            }
            // 左边大于右边就退出
            if (++left>right){
                break;
            }

        }
        List<Integer> arrlist = new ArrayList<>();
        objests.stream().forEach((e)->{
            arrlist.add(e);
        });
        return arrlist;
    }


    public static void main(String[] args) {
        /*int [] [] matrix = {{1,2,3},{4,5,6},{7,88,9}};
        List<Integer> integers = new Code54().spiralOrder(matrix);
        integers.forEach((e)->{
            System.out.println(e);
        });*/
        Set<Integer> singleton = Collections.singleton(0);
        singleton.add(1);
        //singleton.add(2);
        singleton.forEach(o->{
            System.out.println(o);
        });
    }
}
